package com.kedacom.springx.context;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Service;

/**
 * ApplicationContext的帮助类 自动装载ApplicationContext
 */
@SuppressWarnings("unchecked")
@Service
public class SpringContextHelper implements ApplicationContextAware {

	private static ApplicationContext context;

	/**
	 * 此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。
	 * @param applicationContext ApplicationContext 对象.
	 * @throws BeansException
	 */
	public void setApplicationContext(ApplicationContext context) throws BeansException {
		// 在加载Spring时自动获得context
		SpringContextHelper.context = context;
	}

	/**
	 * 这是一个便利的方法，帮助我们快速得到一个BEAN
	 * @param beanName bean的名字
	 * @return 返回一个bean对象
	 */
	public static <T> T getBean(String beanName) {
		T bean = (T) context.getBean(beanName);
		return bean;
	}

	/**
	 * 根据类型获取Spring上下文中的Bean
	 */
	public static <T> T getBean(Class<T> clazz) {
		return context.getBean(clazz);
	}

}
